图1.精密转换器固件协议栈使用no

您所在的位置:网站首页 esp32c3 spi AT固件 图1.精密转换器固件协议栈使用no

图1.精密转换器固件协议栈使用no

#图1.精密转换器固件协议栈使用no| 来源: 网络整理| 查看: 265

快速发展的技术须要软件支持(固件驱动程序和代码示例)来简化设计导出过程。本文介绍怎样借助no-OS(无操作系统)驱动程序和平台驱动程序来建立ADI公司精密模数转换器和数模转换器的应用固件,这种元件在速率、功耗、尺寸和帧率方面提供高水平的性能。

ADI公司提供基于no-OS驱动程序的嵌入式固件示例来支持精密变换器。no-OS驱动程序负责元件配置、转换器数据采集、执行校验等,而基于no-OS驱动程序的固件示例则以便将数据传输到主机进行显示、存储和进一步处理。

no-OS和平台驱动程序简介

顾名思义,no-OS驱动程序设计用于通用(或无特定)操作系统。该名称还意味着这种驱动程序可以用在没有任何OS支持的裸机(BareMetal)系统上。no-OS驱动程序致力为给定精密转换器的数字插口访问提供中级API。no-OS驱动程序使用元件的那些API插口访问、配置、读取、写入数据,而无需晓得寄存器地址(储存器映射)及其内容。

no-OS驱动程序借助平台驱动程序层来支持跨多个硬件/软件平台复用相同的no-OS驱动程序,使固件高度可移植。平台驱动程序层的使用将no-OS驱动程序隔绝开来,前者无需晓得平台特定插口(如SPI、I2C、GPIO等)的低级细节,因而no-OS驱动程序不须要更改能够跨多个平台复用。

linux高级程序设计 pdf_嵌入式linux高级驱动教程 pdf_linux操作系统高级教程

图1.精密转换器固件合同栈

使用no-OS驱动程序

图2显示了no-OS驱动程序的典型代码结构。

嵌入式linux高级驱动教程 pdf_linux操作系统高级教程_linux高级程序设计 pdf

图2.no-OS驱动程序代码结构

嵌入式linux高级驱动教程 pdf_linux操作系统高级教程_linux高级程序设计 pdf

图3.元件配置枚举、结构和API

精密转换器的no-OS驱动程序代码一般包含在两个以C编程语言编撰的源文件中:adxxxx.c和adxxxx.h,其中xxxx代表元件名称(比如AD7606、AD7124等)。元件头文件(adxxxx.h)包含元件特定结构、枚举、寄存器地址和位网段的公共编程插口,将此文件包含到所需的源文件中便可使用这种公开访问插口。元件源文件(adxxxx.c)包含插口的实现,用于初始化和移除元件、读/写元件寄存器、从元件读取数据、获取/设置元件特定参数等。

典型的no-OS驱动程序围绕一组常见功能来建立:

►元件特定寄存器地址、位网段宏、器件配置枚举、读/写元件特定参数(如过取样、增益、基准电流等)的结构的申明。

►通过no-OS驱动程序的元件初始化/移除函数以及元件特定的初始化和驱动程序结构与描述符初始化化学元件/解除元件初始化。

►使用元件寄存器读/写函数访问元件储存器映射或寄存器详尽信息,比如adxxxx_read_register()或adxxxx_write_register()。

no-OS驱动程序代码使用

使用元件特定地址、位网段、参数配置枚举和结构:

如前所述,adxxxx.h头文件包含所有元件特定枚举和结构的申明,这种枚举和结构被传递到元件特定的函数或API以配置或访问元件参数。具体情况如图3所示。

图3中显示的adxxxx_config结构容许用户选择多路复用器通道并为其设置过取样率。此结构的成员(afe_mux_channel和oversampling)是存在于同一头文件中的枚举,其包含这两个数组的所有可能值的数字常量,用户可以选择。

adxxxx.c文件中定义的adxxxx_set_adc_config()函数通过配置结构获取用户传递的配置/参数,并进一步调用adxxxx_spi_reg_write()函数,通过数字插口(在上例中是SPI)将数据写入ADXXXX_REG_CONFIG元件寄存器。

使用no-OS驱动程序结构和初始化函数初始化元件:

图4.元件初始化和驱动程序结构的申明

不仅元件配置枚举和结构之外,no-OS驱动程序还提供以下两个结构:

►元件初始化结构。

►设备驱动程序结构。

元件初始化结构容许用户在用户应用程序代码中定义元件特定的参数和配置。初始化结构包含其他元件特定的参数结构和枚举的成员。图5显示了元件初始化结构的定义。

元件驱动程序结构通过元件初始化函数adxxxx_init()加载元件初始化参数。元件驱动程序结构是在运行时(动态)从堆空间中分配显存。元件驱动程序结构和元件初始化结构中申明的参数几乎完全相同。元件驱动程序结构是元件初始化结构的运行时版本。

以下步骤说明典型的元件初始化函数和初始化流程:

►第1步:在应用程序中创建元件初始化结构的定义(或实例)(比如structadxxxx_init_params),以初始化用户特定的元件参数和平台相关的驱动程序参数。参数在编译期间定义。

注意:初始化结构中定义的参数因元件而异。

►第2步:在应用程序代码中创建元件驱动程序结构的表针实例(变量)。

用户应用程序须要创建元件驱动程序结构的单个表针实例。将此实例传递给所有no-OS驱动程序API/函数以访问元件特定参数。应用程序代码中定义的此表针实例指向堆中动态分配的显存,这是通过no-OS驱动程序中定义的元件初始化函数(如adxxxx_init())完成的。

►第3步:调用元件初始化函数以初始化元件和其他平台特定的外设。

no-OS驱动程序中定义的adxxxx_init()函数用adxxx_init_param结构传递的用户特定参数初始化元件。元件驱动程序结构的表针实例和元件初始化结构的实例作为两个参数传递给此初始化函数。用户应用程序代码可以多次调用adxxxx_init()函数,只要调用初始化函数然后再调用元件移除函数来平衡。

通过元件寄存器读/写函数访问储存器映射(寄存器内容)如图6所示

用户可以通过no-OS驱动程序元件特定的adxxx_read/write()函数访问元件寄存器内容(比如产品ID、暂存区值、OSR等)。

大多数情况下嵌入式linux高级驱动教程 pdf,用户不会直接使用寄存器访问函数。元件特定的函数通过这种寄存器访问函数(如adxxxx_spi_reg_read/write())来调用。假如可能,建议使用元件配置和状态API来访问元件储存器映射,而不要使用直接寄存器访问函数,由于这样能确保元件驱动程序结构与元件中的配置保持同步。

平台驱动程序

平台驱动程序是包装平台特定API的硬件具象层(HAL)之一。它们由no-OS元件驱动程序或用户应用程序代码调用手机linux操作系统,使前者可以独立于底层硬件和软件平台。平台驱动程序包装了平台特定的低级硬件功能,比如SPI/I2C初始化和读/写、GPIO初始化和读/写、UART初始化和接收/发送、用户特定的延后、中断等。

linux操作系统高级教程_linux高级程序设计 pdf_嵌入式linux高级驱动教程 pdf

图5.用户应用程序中的元件初始化结构定义

嵌入式linux高级驱动教程 pdf_linux操作系统高级教程_linux高级程序设计 pdf

图6.访问寄存器内容

SPI平台驱动程序模块的典型文件结构如图7所示。

使用平台驱动程序

平台驱动程序代码一般包含在以C/C++编程语言编撰的三个源文件中。

1)spi.h:这是一个与平台无关的文件,包含SPI功能所需的元件结构和枚举。此头文件中定义的C编程插口没有平台依赖性。

初始化和元件结构中申明的所有参数对任何平台上的SPI插口都是通用的。

元件初始化结构中使用的void*extra参数容许用户传递额外的参数,这种参数可以是所用平台特定的。

SPI驱动程序结构和SPI初始化结构中申明的参数几乎完全相同。SPI驱动程序结构是SPI初始化结构的运行时版本。

2)spi.cpp/.c:此文件包含spi.h文件中申明的函数的实现,这种函数用于初始化特定平台的SPI外设以及读/写数据。广义的“平台”是指硬件微控制器(目标元件)和软件(如RTOS或Mbed-OS)的组合。此文件依赖于平台,移植到其他平台时须要更改。

图9详尽说明了Mbed平台的SPI插口,并显示了怎样使用这种插口和元件初始化/驱动程序结构来初始化SPI和读/写数据。

linux操作系统高级教程_嵌入式linux高级驱动教程 pdf_linux高级程序设计 pdf

图7.SPI平台驱动程序代码结构

linux操作系统高级教程_linux高级程序设计 pdf_嵌入式linux高级驱动教程 pdf

图8.SPI初始化和驱动程序结构

图9.SPIAPI或函数注意:降低的spi_init()和spi_write_and_read()代码是节略代码,

为清楚起见而省略了细节。

嵌入式linux高级驱动教程 pdf_linux操作系统高级教程_linux高级程序设计 pdf

图10.SPI额外的初始化和驱动程序结构

3)spi_extra.h:此文件包含其他元件结构或枚举,其特定于给定平台。它容许用户应用程序代码提供通用spi.h文件中未涉及的配置。诸如linux之家,SPI引脚可能随平台而异,因而可以作为这种平台特定的额外结构的一部份添加。

移植平台驱动程序

平台驱动程序可以从一个平台(微控制器)移植到另一个平台;若要移植,一般须要创建平台特定的.cpp/.c和_extra.h文件。平台驱动程序留驻在微控制器单元供应商提供的元件特定硬件具象层(HAL)之上的一层。为此嵌入式linux高级驱动教程 pdf,为将平台驱动程序从一个平台移植到另一个平台,与调用供应商提供的HAL中存在的函数或API相关的平台驱动程序代码须要做一些细微改动。

图12分辨了基于Mbed的SPI平台驱动程序和ADuCM410SPI平台驱动程序。

ADIno-OS储存库和平台驱动程序的GitHub源代码链接可在ADI公司Wiki和GitHub页面上找到。

为no-OS驱动程序做贡献

ADIno-OS驱动程序已开源并托管在GitHub上。驱动程序除了支持精密转换器,也支持许多其他ADI产品,如加速度计、收发器、光电元件等。任何熟悉源代码的人都可以为那些驱动程序做贡献,方法是递交变更和创建拉取恳求来初审这种变更。

有许多示例项目可以在Linux和/或Windows环境中运行。许多示例项目是用硬件描述性语言(HDL)开发的,便于在Xilinx®、Intel®等公司开发的FPGA以及由不同供应商开发的目标处理器上运行。

如需无操作系统的系统的no-OS软件驱动程序(用C编撰),请访问ADI公司no-OSGitHub储存库。

ADI公司Wiki页面提供了使用Mbed和ADuCMxxx平台为精密转换器开发的示例。

linux操作系统高级教程_嵌入式linux高级驱动教程 pdf_linux高级程序设计 pdf

图11.Mbed平台特定的SPI初始化实现

linux高级程序设计 pdf_嵌入式linux高级驱动教程 pdf_linux操作系统高级教程

图12.平台驱动程序差别



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3